package chapter10;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Java04_Reflect_Exception {
    public static void main(String[] args) throws Exception{
        // TODO 反射 - 练习

        // 需求：实现员工登录功能
        /**
         * 异常
         * 1.ClassNotFoundException 类找不到
         * 2.NoSuchMethodException 方法找不到
         * 3.IllegalArgumentException 参数不合法、
         * 4.NoSuchFieldException 没有属性
         * 5.IllegalAccessException 属性访问权限异常
         * 6.InvocationTargetException 调用目标异常
         */

        // 构造方法对象:ClassNotFoundException
        Class<?> empClass = Class.forName("chapter10.Emp");
        // Class empClass = Emp.class;
        // Class<? extends Emp> empClass = new Emp().getClass();

        // 获取构造方法：NoSuchMethodException
        Constructor declaredConstructor = empClass.getDeclaredConstructor();

        // 构建对象：IllegalArgumentException
        Object emp = declaredConstructor.newInstance();

        // 获取对象属性：NoSuchFieldException
        Field account = empClass.getField("account");
        Field password = empClass.getField("password");

        // 给属性赋值：IllegalAccessException
        account.set(emp, "admin");
        password.set(emp, "admin");

        // 获取登录方法
        Method login = empClass.getMethod("login");

        // 调用方法：InvocationTargetException
        Object result = login.invoke(emp);

        // 打印结果
        System.out.println(result); // true
    }
}
